home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 17 / Computer Interactive cdrom 17 - gen 99.iso / ZDNETIT / CONTENT / OPTIVDOS.ZIP / INCLUDE.ZIP / VQISTD.H < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-21  |  6.5 KB  |  169 lines

  1. /*  VQIstd.h
  2.  
  3.   vector management functions for data type "quad".
  4.  
  5.   Copyright (c) 1996-1998 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VQISTD_H
  10. #define __VQISTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.    extern "C" {
  18. #endif
  19.  
  20. /************  Making the data type quad available   *********************
  21.  *        The following definitions are necessary only if                *
  22.  *        the compiler does not support 64 bit integers.                 */
  23.  
  24. quad        __vf  setquad( long double x );
  25. double      __vf  quadtod( quad x );
  26. long double __vf  _quadtold( quad x );
  27.  
  28. /************************  Generation ******************************/
  29.  
  30. qiVector  __vf  VQI_vector( ui size );
  31. qiVector  __vf  VQI_vector0( ui size );
  32.  
  33. /***************  Addressing single vector elements ******************/
  34.  
  35. quad _VFAR * VQI_Pelement( qiVector X, ui n );
  36.       /* returns a pointer to the n'th element of X. For the memory model
  37.          HUGE, the pointer is normalized. */
  38. #define VQI_element( X, n ) (*VQI_Pelement( X, n ))
  39.  
  40. /****************** Initialization  ******************************/
  41.  
  42. void  __vf  VQI_equ0( qiVector X, ui size );
  43. void  __vf  VQI_equC( qiVector X, ui size, quad C );
  44. void  __vf  VQI_equV( qiVector Y, qiVector X, ui size );
  45. void  __vf  VQI_ramp( qiVector X, ui size, quad Start, quad Rise );
  46. long  __vf  VQI_random( qiVector X, ui size, long seed,
  47.                         quad MinVal, quad MaxVal );  /*  returns new seed */
  48.  
  49.  
  50. /************** Data-type interconversions  ***************************/
  51.         /* no conversion signed-unsigned for quad available, because
  52.            no data-type "unsigned quad" exists */
  53.  
  54. void  __vf  V_SItoQI( qiVector Y, siVector X, ui size );  /* up-conversion */
  55. void  __vf  V_ItoQI(  qiVector Y, iVector  X, ui size );
  56. void  __vf  V_LItoQI( qiVector Y, liVector X, ui size );
  57.  
  58. void  __vf  Vo_QItoSI( siVector Y, qiVector X, ui size ); /* down-conversion */
  59. void  __vf  Vo_QItoI(  iVector  Y, qiVector X, ui size );
  60. void  __vf  Vo_QItoLI( liVector Y, qiVector X, ui size );
  61. #ifdef V_trapIntError
  62.     #define V_QItoSI   Vo_QItoSI
  63.     #define V_QItoI    Vo_QItoI
  64.     #define V_QItoLI   Vo_QItoLI
  65. #else
  66.     void  __vf   V_QItoSI( siVector Y, qiVector X, ui size );
  67.     void  __vf   V_QItoI(  iVector  Y, qiVector X, ui size );
  68.     void  __vf   V_QItoLI( liVector Y, qiVector X, ui size );
  69. #endif
  70.  
  71. void  __vf   V_QItoF(  fVector Y, qiVector X, ui size );
  72. void  __vf   V_QItoD(  dVector Y, qiVector X, ui size );
  73. #ifdef __BORLANDC__
  74.     void  __vf   V_QItoE(  eVector Y, qiVector X, ui size );
  75. #else  /* no 80-bit IEEE reals with Visual C++ */
  76.     #define V_QItoE V_QItoD
  77. #endif
  78.  
  79.  
  80.  
  81. /************** Index-oriented manipqiations ***************************/
  82.  
  83. void  __vf  VQI_rev( qiVector Y, qiVector X, ui size );
  84. #ifdef V_HUGE
  85.     void  __vf  VQI_rotate( qiVector Y, qiVector X, ui size, long pos );
  86. #else
  87.     void  __vf  VQI_rotate( qiVector Y, qiVector X, ui size, int pos );
  88. #endif
  89.  
  90. void  __vf  VQI_delete( qiVector X, ui size, ui pos );
  91. void  __vf  VQI_insert( qiVector X, ui size, ui pos, quad C );
  92.  
  93. void  __vf  VQI_sort( qiVector Y, qiVector X, ui size, int dir );
  94. void  __vf  VQI_sortind( uiVector Ind, qiVector X, ui size, int dir );
  95.  
  96. void  __vf  VQI_subvector( qiVector Y, ui sizey, qiVector X, int samp );
  97. void  __vf  VQI_subvector_equC( qiVector Y, ui subsz, unsigned samp, quad C );
  98. void  __vf  VQI_subvector_equV( qiVector Y, ui subsz, unsigned samp,
  99.                                 qiVector X );
  100.  
  101. void  __vf  VQI_indpick( qiVector Y, uiVector Ind, ui sizey, qiVector X );
  102. void  __vf  VQI_indput(  qiVector Y, qiVector X, uiVector Ind, ui sizex );
  103.  
  104. ui    __vf  VQI_searchC( qiVector XTab, ui size, quad C, int mode );
  105. void  __vf  VQI_searchV( uiVector Ind, qiVector X, ui sizex,
  106.                          qiVector Tab, ui sizetab, int mode );
  107.  
  108. /********************   One-dimensional Vector Operations  ********/
  109.  
  110. quad   __vf  VQI_sum( qiVector X, ui size );
  111. quad   __vf  VQI_max( qiVector X, ui size );
  112. quad   __vf  VQI_min( qiVector X, ui size );
  113. quad   __vf  VQI_maxind( ui _VFAR *Ind, qiVector X, ui size );
  114. quad   __vf  VQI_minind( ui _VFAR *Ind, qiVector X, ui size );
  115. void   __vf  VQI_runsum( qiVector Y, qiVector X, ui size );
  116. void   __vf  VQI_runmax( qiVector Y, qiVector X, ui size );
  117. void   __vf  VQI_runmin( qiVector Y, qiVector X, ui size );
  118. extended __vf  VQI_fsum( qiVector X, ui size );
  119. extended __vf  VQI_mean( qiVector X, ui size );
  120.  
  121. int    __vf  VQI_iselementC( qiVector Tab, ui size, quad C );
  122. ui     __vf  VQI_iselementV( qiVector Y, qiVector X, ui sizex,
  123.                              qiVector Tab, ui sizetab );
  124.  
  125.  
  126. /************************ Input / Output ******************************/
  127.  
  128. void  __vf   VQI_fprint(  FILE _VFAR *stream, qiVector X, ui size,
  129.                   unsigned nperline, unsigned linewidth );
  130.  
  131. #if !(defined _Windows || defined _WINDOWS)
  132.    void __vf  VQI_cprint( qiVector X, ui size, unsigned nperline );
  133. #endif
  134. #define VQI_print( x, sz, npl ) VQI_fprint( stdout, x, sz, npl, 80 )
  135.  
  136. /* note that V_setRadix does not act on VQI_read. Here, the radix is always 10 */
  137. void  __vf   VQI_read( qiVector X, ui size, FILE _VFAR *stream );
  138. void  __vf   VQI_write( FILE _VFAR *stream, qiVector X, ui size );
  139. void  __vf   VQI_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  140. void  __vf   VQI_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  141. void  __vf   VQI_setWriteFormat( char _VFAR *FormatString );
  142.                                             /* for VQI_write and VQI_nwrite */
  143. void  __vf   VQI_setWriteSeparate( char _VFAR *SepString ); /* for VQI_write */
  144. void  __vf   VQI_setNWriteSeparate( char _VFAR *SepString ); /* for VQI_nwrite */
  145. #ifdef V_HUGE
  146.     void  __vf   VQI_store(  FILE _VFAR *stream, qiVector X, ui size );
  147.     void  __vf   VQI_recall( qiVector X, ui size, FILE _VFAR *stream );
  148. #else
  149.     #ifdef __cplusplus
  150.          void  inline VQI_store( FILE _VFAR *stream, qiVector X, ui size )
  151.          {    fwrite( X, sizeof(quad), size, stream ); 
  152.          }
  153.          void  inline VQI_recall( qiVector X, ui size, FILE _VFAR *stream )
  154.          {    fread(  X, sizeof(quad), size, stream );
  155.          }
  156.     #else
  157.         #define VQI_store( str, X, sz )  \
  158.                      fwrite( X, sizeof(quad), sz, str )
  159.         #define VQI_recall( X, sz, str ) \
  160.                      fread(  X, sizeof(quad), sz, str )
  161.     #endif
  162. #endif      /* VQI_store, VQI_recall in binary format */
  163.  
  164. #ifdef __cplusplus
  165. }
  166. #endif
  167.  
  168. #endif   /*  __VQISTD_H    */
  169.